﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BolsaTalentos.BLL;

namespace InterfazBolsaTalentos.Administrador
{
    public partial class ControlPanel : System.Web.UI.Page
    {
        const int ERROR_FILE_NOT_FOUND = 2;
        const int ERROR_ACCESS_DENIED = 5;

        private static List<Contacto> ContactosDeEmpresa = new List<Contacto>();

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button_LogOff_Click(object sender, EventArgs e)
        {
            this.Session["UsuarioDeSesion"] = null;

            this.Response.Redirect("../General/Default.aspx");
        }
        protected void Button_AgregarEmpresa_Click(object sender, EventArgs e)
        {
            if (this.TextBox_Nombre.Text.Trim() != "" && this.TextBox_RNC.Text.Trim() != "")
            {
                try
                {
                    //BolsaTalentos.BLL.Empresa EmpresaToAdd = new BolsaTalentos.BLL.Empresa(this.TextBox_Nombre.Text.Trim(),
                    //                                                                       this.TextBox_RNC.Text.Trim(),
                    //                                                                       this.TextBox_Direccion.Text.Trim(),
                    //                                                                       this.TextBox_Descripcion.Text.Trim(),
                    //                                                                       null,
                    //                                                                       ((UsuarioAdministrativo)this.Session["UsuarioDeSesion"]).ID);

                    //foreach (Contacto item in ControlPanel.ContactosDeEmpresa)
                    //{
                    //    EmpresaToAdd.Contactos.Add(new Contacto(item.ID, item.Descripcion.Trim()));
                    //}

                    ((UsuarioAdministrativo)this.Session["UsuarioDeSesion"]).CrearNuevaEmpresa(new BolsaTalentos.BLL.Empresa(this.TextBox_Nombre.Text.Trim(),
                                                                                                                             this.TextBox_RNC.Text.Trim(),
                                                                                                                             this.TextBox_Direccion.Text.Trim(),
                                                                                                                             this.TextBox_Descripcion.Text.Trim(),
                                                                                                                             null,
                                                                                                                             ((UsuarioAdministrativo)this.Session["UsuarioDeSesion"]).ID));

                    //this.Response.Redirect("ControlPanel.aspx");
                    this.Label_MensajeErrorAgregarEmpresa.Text = "La empresa ha sido agregada con exito";
                }
                catch (Exception)
                {
                    this.Label_MensajeErrorAgregarEmpresa.Text = "Verifique si la empresa ya esta registrada. De no ser asi, intente nuevamente en unos minutos";
                }
            }
            else
            {
                this.Label_MensajeErrorAgregarEmpresa.Text = "Los campos \"Nombre\" y \"RNC\" son obligatorios";
            }
        }

        protected void Button_MostrarPanelEmpresasRegistradas_Click(object sender, EventArgs e)
        {
            this.Panel_EmpresasRegistradas.Visible = !(this.Panel_EmpresasRegistradas.Visible);
            PoblarGridView_Empresas();
        }
        protected void Button_MostrarPanelEmprsa_Click(object sender, EventArgs e)
        {
            this.Panel_AgregarEmpresa.Visible = !(this.Panel_AgregarEmpresa.Visible);
        }
        protected void Button_MostrarPanelDocumentos_Click(object sender, EventArgs e)
        {
            this.Panel_Documentos.Visible = !(this.Panel_Documentos.Visible);
        }
        protected void Button_MostrarPanelReportes_Click(object sender, EventArgs e)
        {
            this.Panel_Reportes.Visible = !(this.Panel_Reportes.Visible);
        }

        protected void Button_ModificarDocumento_Click(object sender, EventArgs e)
        {
            try
            {
                Documento DocumentoToUpdate = new Documento(Convert.ToInt32(this.DropDownList_Documentos.SelectedValue));

                DocumentoToUpdate.Nombre = this.TextBox_NombreDocumento.Text.Trim();
                DocumentoToUpdate.TiempoEnvio = Convert.ToInt32(this.TextBox_TiempoEnvio.Text.Trim());
                DocumentoToUpdate.Destinatario = this.DropDownList_Destinatarios.SelectedItem.Text;
                DocumentoToUpdate.Contenido = this.TextBox_CuerpoDocumento.Text.Trim();

                DocumentoToUpdate.Actualizar();

                this.Label_MensajeErrorDocumento.Text = "El documento ha sido modificado exitosamente";
            }
            catch (Exception)
            {
                this.Label_MensajeErrorDocumento.Text = "No se ha podido modificar el documento. Intente nuevamente en unos minutos";
            }
        }
        protected void Button_AgregarDocumento_Click(object sender, EventArgs e)
        {
            try
            {
                new Documento(this.TextBox_NombreDocumento.Text.Trim(),
                              this.TextBox_CuerpoDocumento.Text.Trim(),
                              this.DropDownList_Destinatarios.SelectedItem.Text,
                              Convert.ToInt32(this.TextBox_TiempoEnvio.Text.Trim())).Insertar();

                this.Label_MensajeErrorDocumento.Text = "El documento ha sido agregado exitosamente";
            }
            catch (Exception)
            {
                this.Label_MensajeErrorDocumento.Text = "No se ha podido agregar el documento. Intente nuevamente en unos minutos";
            }
        }

        #region Funciones no usadas
        //protected void Button_AgregarContacto_Click(object sender, EventArgs e)
        //{
        //    bool YaEsta = false;

        //    foreach (Contacto item in ControlPanel.ContactosDeEmpresa)
        //    {
        //        if (item.TipoContactoID == Convert.ToInt32(this.DropDownList_TiposContactos.SelectedValue)
        //            && item.Descripcion == this.TextBox_NuevoContacto.Text.Trim())
        //        {
        //            YaEsta = true;
        //            break;
        //        }
        //    }

        //    if (YaEsta)
        //    {
        //        this.Label_MensajeErrorAñadirContacto.Text = "Este contacto ya ha sido registrado";
        //    }
        //    else
        //    {
        //        ControlPanel.ContactosDeEmpresa.Add(new Contacto(Convert.ToInt32(this.DropDownList_TiposContactos.SelectedValue), this.TextBox_NuevoContacto.Text.Trim()));

        //        //this.Response.Redirect("ControlPanel.aspx");   
        //    }
        //}
        //protected void Button_EliminarContacto_Click(object sender, EventArgs e)
        //{
        //    Contacto ContactoToDelete = (from c in ControlPanel.ContactosDeEmpresa
        //                                 where c.Descripcion == this.DropDownList_ContactosDeUsuario.SelectedItem.Text.Trim()
        //                                 select c).First();

        //    ContactoToDelete = null;

        //    //this.Response.Redirect("ControlPanel.aspx");
        //}

        //protected void DropDownList_TiposContactos_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    if (this.TextBox_NuevoContacto.Text.Trim() != "")
        //    {
        //        this.Button_AgregarContacto.Enabled = true;
        //    }
        //    if (this.DropDownList_TiposContactos.SelectedValue == "0")
        //    {
        //        this.Button_AgregarContacto.Enabled = false;
        //    }
        //}
        //protected void TextBox_NuevoContacto_TextChanged(object sender, EventArgs e)
        //{
        //    if (this.DropDownList_TiposContactos.SelectedValue != "0")
        //    {
        //        this.Button_AgregarContacto.Enabled = true;
        //    }
        //    if (this.TextBox_NuevoContacto.Text.Trim() == "")
        //    {
        //        this.Button_AgregarContacto.Enabled = false;
        //    }
        //}
        //protected void DropDownList_ContactosDeUsuario_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    this.Button_EliminarContacto.Enabled = true;

        //    if (this.DropDownList_ContactosDeUsuario.SelectedValue == "0")
        //    {
        //        this.Button_EliminarContacto.Enabled = false;
        //    }
        //}

        //protected void PoblarTextBox_Contactos()
        //{
        //    this.TextBox_Contactos.Text = "";
        //    foreach (Contacto item in ControlPanel.ContactosDeEmpresa)
        //    {
        //        this.TextBox_Contactos.Text += Contacto.GetDescripcionByTipoContactoID(item.TipoContactoID) + " -> " + item.Descripcion + "\n";
        //    }
        //}
        //protected void PoblarDropDownList_ContactosDeUsuario()
        //{
        //    if (this.DropDownList_ContactosDeUsuario.Items.Count == 1)
        //    {
        //        foreach (Contacto item in ControlPanel.ContactosDeEmpresa)
        //        {
        //            this.DropDownList_ContactosDeUsuario.Items.Add(new ListItem(item.Descripcion));
        //        }
        //    }
        //}
        #endregion

        protected void DropDownList_Documentos_SelectedIndexChanged(object sender, EventArgs e)
        {
            Documento Doc;

            if (this.DropDownList_Documentos.SelectedValue != "0")
            {
                Doc = new Documento(Convert.ToInt32(this.DropDownList_Documentos.SelectedValue));

                this.TextBox_CuerpoDocumento.Text = Doc.Contenido;
                this.TextBox_NombreDocumento.Text = Doc.Nombre;

                if (Doc.TiempoEnvio != null)
                {
                    this.TextBox_TiempoEnvio.Text = Doc.TiempoEnvio.ToString();
                }

                if (Doc.Destinatario == "Empresas")
                {
                    this.DropDownList_Destinatarios.SelectedValue = "1";
                }
                else if (Doc.Destinatario == "Egresados")
                {
                    this.DropDownList_Destinatarios.SelectedValue = "2";
                }
                else if (Doc.Destinatario == "Todos")
                {
                    this.DropDownList_Destinatarios.SelectedValue = "3";
                }

                this.Button_ModificarDocumento.Enabled = true;
                this.Button_AgregarDocumento.Enabled = false;
            }
            else
            {
                Doc = null;
                this.TextBox_CuerpoDocumento.Text = "";
                this.TextBox_NombreDocumento.Text = "";
                this.TextBox_TiempoEnvio.Text = "";
                this.DropDownList_Destinatarios.SelectedValue = "0";
                this.Button_ModificarDocumento.Enabled = false;
                this.Button_AgregarDocumento.Enabled = true;
            }
        }
        protected void GridView_Empresas_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (new BolsaTalentos.BLL.Empresa(Convert.ToInt32(this.GridView_Empresas.SelectedRow.Cells[1].Text)).SiActiva)
            {
                this.Button_ActivarEmpresa.Enabled = false;
            }
            else
            {
                this.Button_ActivarEmpresa.Enabled = true;
            }
        }

        private void PoblarGridView_Empresas()
        {
            var EmpresasSource = from e in BolsaTalentos.BLL.Empresa.GetAllEmpresas()
                                 select new
                                 {
                                     ID = e.ID,
                                     RNC = e.RNC,
                                     Nombre = e.Nombre,
                                     Activa = this.Traducir(e.SiActiva),
                                     Direccion = e.Direccion,
                                     Descripcion = e.Descripcion,
                                     FechaSolicitud = e.FechaSolicitud,
                                     FechaCreacion = e.FechaCreacion,
                                 };

            if (EmpresasSource.Count() == 0)
            {
                //Lo ideal seria poner la propiedad Visible = true. pero asp se pajarea
                this.Label_MensajeErrorNoEmpresas.Visible = true;
            }
            else
            {
                this.Label_MensajeErrorNoEmpresas.Visible = false;
            }

            this.GridView_Empresas.DataSource = EmpresasSource;
            this.GridView_Empresas.DataBind();
            //this.HideUnwantedColumns();          // this shit just wont work!

            foreach (GridViewRow item in this.GridView_Empresas.Rows)
            {
                if (item.Cells[4].Text == "No")
                    item.BackColor = Color.FromArgb(204, 0, 0);
            }
        }

        protected void Button_ActivarEmpresa_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioAdministrativo)this.Session["UsuarioDeSesion"]).AceptarSolicitudDeEmpresa(Convert.ToInt32(this.GridView_Empresas.SelectedRow.Cells[1].Text));

                
                //the force
                this.Button_MostrarPanelEmpresasRegistradas_Click(null, null);
                this.Button_MostrarPanelEmpresasRegistradas_Click(null, null);
                //the end of the force

                this.Label_MensajeErrorActivacionEmpresa.Text = "La empresa se ha activado exitosamente";
            }
            catch (Exception)
            {
                this.Label_MensajeErrorActivacionEmpresa.Text = "Intente nuevamente activar esta empresa en unos minutos";
            }
        }

        protected string Traducir(bool BoolValue)
        {
            if (BoolValue) return "Si";
            else return "No";
        }

        protected void Button_GenerarReporte_Click(object sender, EventArgs e)
        {
            try
            {
                Process myProcess = new Process();
                // Get the path that stores user documents.
                string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                //myDocumentsPath

                myProcess.StartInfo.FileName = Environment.CurrentDirectory + "\\LibroDeReportes.xlsx";
                //myProcess.StartInfo.Verb = "Print";
                //myProcess.StartInfo.CreateNoWindow = true;
                myProcess.Start();
            }
            catch (Win32Exception W32ex)
            {                
                if (W32ex.NativeErrorCode == ERROR_FILE_NOT_FOUND)
                {
                    this.Label_MensajeErrorGenerarReporte.Text = W32ex.Message;
                }

                else if (W32ex.NativeErrorCode == ERROR_ACCESS_DENIED)
                {
                    // Note that if your word processor might generate exceptions
                    // such as this, which are handled first.
                    this.Label_MensajeErrorGenerarReporte.Text = W32ex.Message;
                }
            }
        }

        protected void TextBox_NuevaHabilidad_TextChanged(object sender, EventArgs e)
        {
            this.Label_MensajeErrorNuevaHabilidad.Text = " ";

#warning Esto no funciona bien
            // A ver si a esto le da la gana de funcionar!
            if (this.Button_NuevaHabilidad.Text.Trim() != "")
            {
                this.Button_NuevaHabilidad.Enabled = true;
            }
            else
            {
                this.Button_NuevaHabilidad.Enabled = false;
            }     
        }

        protected void DropDownList_HabilidadesDeSistema_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Button_EliminarHabilidad.Enabled = true;

            if (this.DropDownList_HabilidadesDeSistema.SelectedValue == "0")
            {
                this.Button_EliminarHabilidad.Enabled = false;
            }
        }

        protected void Button_NuevaHabilidad_Click(object sender, EventArgs e)
        {
            try
            {
                new Habilidad(this.TextBox_NuevaHabilidad.Text.Trim()).Insertar();

                this.Response.Redirect("ControlPanel.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorNuevaHabilidad.Text = "No puede agregar esta habilidad";
            }
        }

        protected void Button_EliminarHabilidad_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioAdministrativo)this.Session["UsuarioDeSesion"]).EliminarHabilidad(Convert.ToInt32(this.DropDownList_HabilidadesDeSistema.SelectedValue));

                this.Response.Redirect("ControlPanel.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorHabilidadEliminar.Text = "Intente eliminar esta habilidad luego";
            }
        }

        protected void Button_MostrarPanelHabilidades_Click(object sender, EventArgs e)
        {
            this.Panel_Habilidades.Visible = !(this.Panel_Habilidades.Visible);
        }

    }
}
